threading PriorityQueue 优先级

各个进程读取(in)优先队列是有序的 out 是无序的 (一定要设定保护进程,否则程序无法停止。)

import Queue
import threading
import sys
import time
import random


class Worker(threading.Thread):
    ''''''
    def __init__(self,queue):
        threading.Thread.__init__(self)
        self.__queue = queue
        self.setDaemon(True)

    def run(self):
        while True:
            try :
                item = self.__queue.get()
                print item , 'in'
                time.sleep(random.randint(100,1000)/1000.0)
                print item , 'out'
                self.__queue.task_done()
            except Queue.Empty:
                break


queue = Queue.PriorityQueue()

queue.put((20,'second'))
queue.put((10,'first'))
queue.put((30,'third'))

for i in xrange(3):
    Worker(queue).start()

queue.put((50,'fifth'))
queue.put((80,'eighth'))
queue.put((70,'seventh'))
queue.put((60,'sixth'))

queue.join()
sys.exit(0)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(10, 'first') in
(20, 'second') in
(30, 'third') in
(30, 'third') out
(50, 'fifth') in
(20, 'second') out
(60, 'sixth') in
(50, 'fifth') out
(70, 'seventh') in
(10, 'first') out
(80, 'eighth') in
(70, 'seventh') out
(80, 'eighth') out
(60, 'sixth') out